package dataProviders;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

import entities.KontrFirma;
import entities.KontrOsoba;
import entities.Kontrahent;
import dataBase.DataBaseController;

public class ContractorsDataProvider 
{
	
	public static LinkedList<Kontrahent> getListOfAllContractors(boolean isPerson)
	{
		LinkedList<Kontrahent> tmpLista = new LinkedList<Kontrahent>();
		try 
		{
			if(isPerson == true)
			{
				ResultSet wynik = DataBaseController.db.dbSqlQuery( "SELECT fizycznaID,telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip FROM Osoby_fizyczne" );
				while(wynik.next())
				{
					KontrOsoba kontrOsoba = new KontrOsoba(wynik.getInt("fizycznaID"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("miasto"),wynik.getString("imie"),wynik.getString("nazwisko"),wynik.getString("pesel"),wynik.getString("nip"));
					tmpLista.add( kontrOsoba );
				}
			}
			else
			{
				ResultSet wynik = DataBaseController.db.dbSqlQuery( "SELECT kontrahentID, nazwa, regon, telefon, email, ulica, numer, kodPocztowy, nip, miasto FROM Kontrahenty_prawny" );
				while(wynik.next())
				{
					KontrFirma kontrFirma = new KontrFirma(wynik.getInt("kontrahentID"),wynik.getString("nazwa"),wynik.getString("regon"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("nip"),wynik.getString("miasto"));
					tmpLista.add( kontrFirma );
				}				
			}
			return tmpLista;
		} 
		catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	public static void addConcractor(Kontrahent kon) 
	{
		if( kon.getClass() == KontrOsoba.class )
		{
			addConcractorHuman((KontrOsoba)kon);			
			((KontrOsoba)kon).setKontrahentID( ostatnieIdKontrahenta( Kontrahent.FIZYCZNY ) );
		}
		else if( kon.getClass() == KontrFirma.class )
		{
			addConcractorFirm((KontrFirma )kon);
			((KontrFirma) kon).setKontrahentID(ostatnieIdKontrahenta(Kontrahent.PRAWNY));
		}
	}
	private static void addConcractorFirm(KontrFirma k)
	{
		String sql = "INSERT INTO Kontrahenty_prawny (nazwa, regon, telefon, email, ulica, numer, kodPocztowy, nip, miasto) " +
		"VALUES( '"+k.getNazwa()+"','"+k.getRegon() +"','"+k.getTelefon() +"','"+k.getEmail()+"','"+k.getUlica() +"','"+k.getNumerUlicy() +"','"+k.getKodPocztowy() +"',null,'"+k.getMiasto() +"')";
		//System.out.println(sql);
		try 
		{
			DataBaseController.db.dbSqlUpdate(sql);
			DataBaseController.db.dbCommit();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	private static void addConcractorHuman(KontrOsoba k)
	{
		String sql = "INSERT INTO Osoby_fizyczne (telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip) " +
		"VALUES( '"+k.getTelefon()+"','"+k.getEmail() +"','"+k.getUlica() +"','"+k.getNumerUlicy()+"','"+k.getKodPocztowy() +"','"+k.getMiasto() +"','"+k.getImie() +"','"+k.getNazwisko() +"','"+k.getPesel()+"',null)";
		//System.out.println(sql);

		try 
		{
			DataBaseController.db.dbSqlUpdate(sql);
			DataBaseController.db.dbCommit();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	public static int ostatnieIdKontrahenta( int i ) 
	{
		int ostatnieId = -1;
		if(i == Kontrahent.FIZYCZNY)
		{
			try 
			{
				String sql ="SELECT IDENT_CURRENT('Osoby_fizyczne') as \"id\"";
				ResultSet wynik = DataBaseController.db.dbSqlQuery( sql);
				while( wynik.next() )
				{
					ostatnieId = wynik.getInt("id");
				}				
			} 
			catch(SQLException e) 
			{
				e.printStackTrace();
				return ostatnieId;
			}
		}
		else if(i == Kontrahent.PRAWNY)
		{
			try 
			{
				String sql ="SELECT IDENT_CURRENT('Kontrahenty_prawny') as \"id\"";
				ResultSet wynik = DataBaseController.db.dbSqlQuery( sql);
				while( wynik.next() )
				{
					ostatnieId = wynik.getInt("id");

				}				
			} 
			catch(SQLException e) 
			{
				e.printStackTrace();
				return ostatnieId;
			}
		}
		
		return ostatnieId;		

	}
}
